@cruseo o aynı değeri vermesinin sebebi, öncesinde bir komut dediğin random fonksiyonuna verdiğin seed olmasın? seed vermezsen aynı sayıyı üretmesi normal.
daha önceki cevaplarda da söylenmiş, random belli fonksiyonların bir sonucu ve dolayısıyla deterministik, aynı input'u verdiğin zaman aynı output'u vermek zorunda. bu sebeple bu fonksiyonun bir şekilde seed edilmesi gerekiyor, bunda da genelde sistem saati kullanılır. C'de sistem saatiyle random fonksiyonunu seed etmek için srand(time(null)) gibi bir şey dersin mesela programın bir anında, bundan sonra rand() fonksiyonuyla üreteceğin sayılar random olur. Ama mesela her rand çağırmandan önce srand yaparsan iki komutun işlenmesi arasında geçen cpu cycle sayısı aynı olacağı için sana sürekli aynı değeri döndürür.
Java'nın random class'ından üretilen random'lar epey başarılı bulunur mesela, tabi ki sistemde tek değişkenimiz saat değil, ekrana giden output, klavyeden girilen input, diğer donanımların mevcut state'leri gibi birçok farklı öğe kullanılabilir, java da birçok farklı yerden farklı değer alarak bir random sayı üretiyor, bu da java'nın randomunu daha başarılı yapıyor.
Bu randomlar hep aynı input tekrar verildiğinde aynı output'u verecekleri için pseudo-random. Gerçek random için bazı donanımsal çözümler var, bir adet random number generator alıyorsun mesela, bu bir donanım, içinde yanlış bilmiyorsam radyoaktivite ile ilgili bir şeyler var ve bunlara dayanarak öngörülemeyecek sonuçlar üretiyor, bu bir çözüm.
Ayrıca internette gerçek random number sağlayıcılar var, hatta onlardan parayla hizmet alabiliyor, sundukları apileri falan kullanabiliyorsun. Onlar da uzaydaki sinyalleri falan baz alıyorlar, değişken sayısı sonsuza yaklaştıkça random da o kadar real random oluyor.
Ha bir random generator'ın ürettiği sayılar ne kadar random'dur, bu da
monte carlo methodları ile belirleniyor, istersen araştırabilirsin.
Bu işin fazla derinine inersen felsefi tartışmalara kadar gidiyorsun. Son olarak:
dilbert.com